{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "cbfa1e45-4165-4ed4-9f7e-6af6dddbc9ea",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据的随机 5 个样本：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "      <th>feature3</th>\n",
       "      <th>amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>183</th>\n",
       "      <td>-0.603985</td>\n",
       "      <td>0.086590</td>\n",
       "      <td>-0.155677</td>\n",
       "      <td>4.276782</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>73</th>\n",
       "      <td>0.081874</td>\n",
       "      <td>2.314659</td>\n",
       "      <td>-1.867265</td>\n",
       "      <td>-3.079018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>106</th>\n",
       "      <td>0.324166</td>\n",
       "      <td>-0.130143</td>\n",
       "      <td>0.096996</td>\n",
       "      <td>6.517060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>292</th>\n",
       "      <td>-0.517611</td>\n",
       "      <td>0.223788</td>\n",
       "      <td>-0.016423</td>\n",
       "      <td>3.391037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>136</th>\n",
       "      <td>0.120296</td>\n",
       "      <td>0.514439</td>\n",
       "      <td>0.711615</td>\n",
       "      <td>6.248114</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     feature1  feature2  feature3    amount\n",
       "183 -0.603985  0.086590 -0.155677  4.276782\n",
       "73   0.081874  2.314659 -1.867265 -3.079018\n",
       "106  0.324166 -0.130143  0.096996  6.517060\n",
       "292 -0.517611  0.223788 -0.016423  3.391037\n",
       "136  0.120296  0.514439  0.711615  6.248114"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "预测值的平均绝对误差：0.42728384638577827\n",
      "预测值的均方误差：0.29220404090641017\n",
      "R² 得分：0.9755005929979831\n",
      "模型得分：0.9755005929979831\n",
      "多元线性回归模型系数：\n",
      " [ 1.9676517  -0.95134066  2.98550436]\n",
      "多元线性回归模型常数项： 5.046019294024204\n",
      "各特征间的系数矩阵：\n",
      " [ 1.9676517  -0.95134066  2.98550436]\n",
      "影响目标值的特征排序（索引）：\n",
      " [1 0 2]\n",
      "影响目标值的特征排序（名称）：\n",
      " Index(['feature2', 'feature1', 'feature3'], dtype='object')\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 39044 (\\N{CJK UNIFIED IDEOGRAPH-9884}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 27979 (\\N{CJK UNIFIED IDEOGRAPH-6D4B}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20540 (\\N{CJK UNIFIED IDEOGRAPH-503C}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 23454 (\\N{CJK UNIFIED IDEOGRAPH-5B9E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38469 (\\N{CJK UNIFIED IDEOGRAPH-9645}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n",
    "\n",
    "np.random.seed(42)\n",
    "n_samples = 300\n",
    "\n",
    "X = np.random.randn(n_samples, 3)\n",
    "\n",
    "true_coef = np.array([2, -1, 3])\n",
    "\n",
    "intercept = 5\n",
    "\n",
    "y = np.dot(X, true_coef) + intercept + np.random.randn(n_samples) * 0.5\n",
    "\n",
    "\n",
    "data = pd.DataFrame(X, columns=['feature1', 'feature2', 'feature3'])\n",
    "data['amount'] = y\n",
    "\n",
    "\n",
    "print(\"数据的随机 5 个样本：\")\n",
    "display(data.sample(5))\n",
    "\n",
    "y = data['amount']\n",
    "\n",
    "X = data.drop(['amount'], axis=1)\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)\n",
    "\n",
    "model = LinearRegression()\n",
    "model.fit(X_train, y_train)\n",
    "\n",
    "y_pred = model.predict(X_test)\n",
    "\n",
    "mae = mean_absolute_error(y_test, y_pred)\n",
    "mse = mean_squared_error(y_test, y_pred)\n",
    "r2 = r2_score(y_test, y_pred)\n",
    "model_score = model.score(X_test, y_test)\n",
    "\n",
    "print(f'预测值的平均绝对误差：{mae}')\n",
    "print(f'预测值的均方误差：{mse}')\n",
    "print(f'R² 得分：{r2}')\n",
    "print(f'模型得分：{model_score}')\n",
    "\n",
    "print('多元线性回归模型系数：\\n', model.coef_)\n",
    "print('多元线性回归模型常数项：', model.intercept_)\n",
    "\n",
    "print('各特征间的系数矩阵：\\n', model.coef_)\n",
    "print('影响目标值的特征排序（索引）：\\n', np.argsort(model.coef_))\n",
    "print('影响目标值的特征排序（名称）：\\n', X.columns[np.argsort(model.coef_)])\n",
    "\n",
    "plt.scatter(y_test, y_pred)\n",
    "plt.xlabel('实际值')\n",
    "plt.ylabel('预测值')\n",
    "plt.title('实际值 vs 预测值')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8fb8e643-8a97-4b35-bd55-fd1064fb8ac9",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
